﻿using System;
using System.Collections.Generic;
using System.Text;

namespace CPN.PJN.Silverlight.Common.ExceptionHandling.Formatters
{
    /// <summary>
    /// Cette classe représente un formatage de l'exception pour la sortie par défaut
    /// </summary>
    public class DefaultExceptionFormatter : ExceptionFormatter
    {
        #region Format Method
        
        /// <summary>
        /// Cette méthode permet de formatter l'exception pour l'afficher
        /// </summary>
        /// <param name="exceptionToHandle">Exception inner</param>
        /// <param name="data">données supplémentaires à afficher</param>
        /// <returns>Message affiché</returns>
        public override string Format(Exception exceptionToHandle, params object[] data)
        {
            var builder = new StringBuilder();

            builder.AppendLine(exceptionToHandle.Message);
            builder.AppendLine(exceptionToHandle.StackTrace);

            foreach (KeyValuePair<object, object> item in exceptionToHandle.Data)
            {
                builder.AppendLine(string.Format("Exception Data : {0} = {1}", Convert.ToString(item.Key), Convert.ToString(item.Value)));
            }

            if (data != null)
            {
                foreach (var item in data)
                {
                    builder.AppendLine(string.Format("Extended Data : {0}", Convert.ToString(item)));
                }
            }
            return builder.ToString();
        } 

        #endregion
    }
}
